<template>
  <div class="wrapper">
    <!-- header部分 -->
    <header>
      <p>商家信息</p>
    </header>
    <!-- 商家logo部分 -->
    <div class="business-logo">
      <img :src="business.businessImg">
    </div>
    <!-- 商家信息部分 -->
    <div class="business-info">
      <h1>{{business.businessName}}</h1>
      <p>&#165;{{business.starPrice}}起送 &#165;{{business.deliveryPrice}}配送</p>
      <p>{{business.businessExplain}}</p>
    </div>
    <!-- 食品列表部分 -->
    <ul class="food">
      <li v-for="(item,index) in foodArr">
        <div class="food-left">
          <img :src="item.foodImg">
          <div class="food-left-info">
            <h3>{{item.foodName}}</h3>
            <p>{{item.foodExplain}}</p>
            <p>&#165;{{item.foodPrice}}</p>
          </div>
        </div>
        <div class="food-right">
          <div>
            <i class="fa fa-minus-circle" @click="minus(index)" v
               show="item.quantity!=0"></i>
          </div>
          <p><span v-show="item.quantity!=0">{{item.quantity}}</span></p>
          <div>
            <i class="fa fa-plus-circle" @click="add(index)"></i>
          </div>
        </div>
      </li>
    </ul>
    <!-- 购物车部分 -->
    <div class="cart">
      <div class="cart-left">
        <div class="cart-left-icon" :style="totalQuantity==0?'background-color:#505051;':'background-color:#3190E8;'">
          <i class="fa fa-shopping-cart"></i>
          <div class="cart-left-icon-quantity" v-show="totalQuantity!=0">
            {{totalQuantity}}</div>
        </div>
        <div class="cart-left-info">
          <p>&#165;{{totalPrice}}</p>
          <p>另需配送费{{business.deliveryPrice}}元</p>
        </div>
      </div>
      <div class="cart-right">
        <!-- 不够起送费 -->
        <div class="cart-right-item" v-show="totalSettle<business.starPrice"
             style="background-color: #535356;cursor: default;">
          &#165;{{business.starPrice}}起送
        </div>
        <!-- 达到起送费 -->
        <div class="cart-right-item" @click="toOrder" v
             show="totalSettle>=business.starPrice">
          去结算
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "BusinessInfo",
  data() {
    return {
      businessId: this.$route.query.businessId,
      business: {},
      foodArr: [],
      user: {},
    };
  },
  created() {
    this.initUser();
    this.fetchBusinessInfo();
    this.fetchFoodInfo();
  },
  methods: {
    // 初始化用户信息
    initUser() {
      const token = localStorage.getItem("token");
      if (token) {
        try {
          const payload = JSON.parse(atob(token.split(".")[1])); // 解析 JWT Payload
          this.user = { userId: payload.sub }; // 假设 userId 存储在 sub 字段中
        } catch (error) {
          console.error("Token 解析失败:", error);
          this.user = null; // 清空用户信息
        }
      } else {
        this.user = null; // 未登录
      }
    },
    // 获取商家信息
    fetchBusinessInfo() {
      this.$axios
          .post(
              "BusinessController/getBusinessById",
              this.$qs.stringify({ businessId: this.businessId })
          )
          .then((response) => {
            this.business = response.data;
          })
          .catch((error) => {
            console.error("获取商家信息失败:", error);
          });
    },
    // 获取食品信息
    fetchFoodInfo() {
      this.$axios
          .post(
              "FoodController/listFoodByBusinessId",
              this.$qs.stringify({ businessId: this.businessId })
          )
          .then((response) => {
            this.foodArr = response.data.map((item) => ({
              ...item,
              quantity: 0, // 初始化数量
            }));

            if (this.user) {
              this.listCart();
            }
          })
          .catch((error) => {
            console.error("获取食品信息失败:", error);
          });
    },
    // 获取购物车信息
    listCart() {
      this.$axios
          .post(
              "CartController/listCart",
              this.$qs.stringify({ businessId: this.businessId, userId: this.user.userId })
          )
          .then((response) => {
            const cartArr = response.data;
            this.foodArr.forEach((foodItem) => {
              const cartItem = cartArr.find((item) => item.foodId === foodItem.foodId);
              if (cartItem) {
                foodItem.quantity = cartItem.quantity;
              }
            });
          })
          .catch((error) => {
            console.error("获取购物车信息失败:", error);
          });
    },
    // 添加到购物车
    add(index) {
      if (!this.user) {
        this.redirectToLogin();
        return;
      }

      if (this.foodArr[index].quantity === 0) {
        this.saveCart(index);
      } else {
        this.updateCart(index, 1);
      }
    },
    // 从购物车移除
    minus(index) {
      if (!this.user) {
        this.redirectToLogin();
        return;
      }

      if (this.foodArr[index].quantity > 1) {
        this.updateCart(index, -1);
      } else {
        this.removeCart(index);
      }
    },
    // 保存到购物车
    saveCart(index) {
      this.sendRequest("CartController/saveCart", "POST", {
        businessId: this.businessId,
        userId: this.user.userId,
        foodId: this.foodArr[index].foodId,
      })
          .then(() => {
            this.foodArr[index].quantity = 1;
          })
          .catch((error) => {
            console.error("保存购物车失败:", error);
          });
    },
    // 更新购物车
    updateCart(index, num) {
      const newQuantity = this.foodArr[index].quantity + num;

      this.sendRequest("CartController/updateCart", "POST", {
        businessId: this.businessId,
        userId: this.user.userId,
        foodId: this.foodArr[index].foodId,
        quantity: newQuantity,
      })
          .then(() => {
            this.foodArr[index].quantity = newQuantity;
          })
          .catch((error) => {
            console.error("更新购物车失败:", error);
          });
    },
    // 移除购物车
    removeCart(index) {
      this.sendRequest("CartController/removeCart", "DELETE", {
        businessId: this.businessId,
        userId: this.user.userId,
        foodId: this.foodArr[index].foodId,
      })
          .then(() => {
            this.foodArr[index].quantity = 0;
          })
          .catch((error) => {
            console.error("移除购物车失败:", error);
          });
    },
    // 通用请求方法
    sendRequest(url, method, data) {
      const token = localStorage.getItem("token");
      if (!token) {
        console.error("Token 不存在，跳转登录页");
        this.redirectToLogin();
        return Promise.reject("未登录");
      }

      return this.$axios({
        method,
        url,
        data: this.$qs.stringify(data),
        headers: {
          Authorization: `Bearer ${token}`,
          "Content-Type": "application/x-www-form-urlencoded",
        },
        withCredentials: true,
      });
    },
    // 跳转到登录页
    redirectToLogin() {
      this.$router.push({ path: "/login" });
    },
    // 跳转到订单页面
    toOrder() {
      this.$router.push({
        path: "/orders",
        query: { businessId: this.business.businessId },
      });
    },
  },
  computed: {
    totalPrice() {
      return this.foodArr.reduce((total, item) => total + item.foodPrice * item.quantity, 0);
    },
    totalQuantity() {
      return this.foodArr.reduce((total, item) => total + item.quantity, 0);
    },
    totalSettle() {
      return this.totalPrice + (this.business.deliveryPrice || 0);
    },
  },
};
</script>
<style scoped>
/****************** 总容器 ******************/
.wrapper {
  width: 100%;
  height: 100%;
}
/****************** header部分 ******************/
.wrapper header {
  width: 100%;
  height: 12vw;
  background-color: #0097FF;
  color: #fff;
  font-size: 4.8vw;
  position: fixed;
  left: 0;
  top: 0;
  z-index: 1000;
  display: flex;
  justify-content: center;
  align-items: center;
}
/****************** 商家logo部分 ******************/
.wrapper .business-logo {
  width: 100%;
  height: 35vw;
  /*使用上外边距避开header部分*/
  margin-top: 12vw;
  display: flex;
  justify-content: center;
  align-items: center;
}
.wrapper .business-logo img {
  width: 40vw;
  height: 30vw;
  border-radius: 5px;
}
/****************** 商家信息部分 ******************/
.wrapper .business-info {
  width: 100%;
  height: 20vw;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
.wrapper .business-info h1 {
  font-size: 5vw;
}
.wrapper .business-info p {
  font-size: 3vw;
  color: #666;
  margin-top: 1vw;
}
/****************** 食品列表部分 ******************/
.wrapper .food {
  width: 100%;
  /*使用下外边距避开footer部分*/
  margin-bottom: 14vw;
}
.wrapper .food li {
  width: 100%;
  box-sizing: border-box;
  padding: 2.5vw;
  user-select: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.wrapper .food li .food-left {
  display: flex;
  align-items: center;
}
.wrapper .food li .food-left img {
  width: 20vw;
  height: 20vw;
}
.wrapper .food li .food-left .food-left-info {
  margin-left: 3vw;
}
.wrapper .food li .food-left .food-left-info h3 {
  font-size: 3.8vw;
  color: #555;
}
.wrapper .food li .food-left .food-left-info p {
  font-size: 3vw;
  color: #888;
  margin-top: 2vw;
}
.wrapper .food li .food-right {
  width: 16vw;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.wrapper .food li .food-right .fa-minus-circle {
  font-size: 5.5vw;
  color: #999;
  cursor: pointer;
}
.wrapper .food li .food-right p {
  font-size: 3.6vw;
  color: #333;
}
.wrapper .food li .food-right .fa-plus-circle {
  font-size: 5.5vw;
  color: #0097EF;
  cursor: pointer;
}
/****************** 购物车部分 ******************/
.wrapper .cart {
  width: 100%;
  height: 14vw;
  position: fixed;
  left: 0;
  bottom: 0;
  display: flex;
}
.wrapper .cart .cart-left {
  flex: 2;
  background-color: #505051;
  display: flex;
}
.wrapper .cart .cart-left .cart-left-icon {
  width: 16vw;
  height: 16vw;
  box-sizing: border-box;
  border: solid 1.6vw #444;
  border-radius: 8vw;
  background-color: #3190E8;
  font-size: 7vw;
  color: #fff;
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: -4vw;
  margin-left: 3vw;
  position: relative;
}
.wrapper .cart .cart-left .cart-left-icon-quantity {
  width: 5vw;
  height: 5vw;
  border-radius: 2.5vw;
  background-color: red;
  color: #fff;
  font-size: 3.6vw;
  display: flex;
  justify-content: center;
  align-items: center;
  position: absolute;
  right: -1.5vw;
  top: -1.5vw;
}
.wrapper .cart .cart-left .cart-left-info p:first-child {
  font-size: 4.5vw;
  color: #fff;
  margin-top: 1vw;
}
.wrapper .cart .cart-left .cart-left-info p:last-child {
  font-size: 2.8vw;
  color: #AAA;
}
.wrapper .cart .cart-right {
  flex: 1;
}
/*达到起送费时的样式*/
.wrapper .cart .cart-right .cart-right-item {
  width: 100%;
  height: 100%;
  background-color: #38CA73;
  color: #fff;
  font-size: 4.5vw;
  font-weight: 700;
  user-select: none;
  cursor: pointer;
  display: flex;
  justify-content: center;
  align-items: center;
}
/*不够起送费时的样式（只有背景色和鼠标样式的区别）*/
/*
.wrapper .cart .cart-right .cart-right-item{
width: 100%;
height: 100%;
background-color: #535356;
color: #fff;
font-size: 4.5vw;
font-weight: 700;
user-select: none;
display: flex;
justify-content: center;
align-items: center;
}
*/
</style>